package com.daily.DailyStudy.Shallow2DeepCopy;

public class ShallowCopy {

    public static void main(String[] args) {
        Book book = new Book();
        book.setBook_name("水浒传");
        book.setBook_price("20");
        Bookshelf shelf = new Bookshelf();
        shelf.setBook(book);
        shelf.setNum(1);
        shelf.setName("长春图书馆");

        Bookshelf shelf2 = (Bookshelf)shelf.clone();
        Book book2 = shelf2.getBook();
        book2.setBook_name("老人与海");
        book2.setBook_price("15");
        shelf2.setBook(book2);
        shelf2.setNum(2);
        shelf2.setName("广州图书馆");

        System.out.println("1: "+shelf.toString());
        System.out.println("2: "+shelf2.toString());
    }
}
/**
 * 浅拷贝介绍
 * 浅拷贝是按位拷贝对象，它会创建一个新对象，这个对象有着原始对象属性值的一份精确拷贝。
 * 如果属性是基本类型，拷贝的就是基本类型的值；如果属性是内存地址（引用类型），拷贝的就是内存地址 ，
 * 因此如果其中一个对象改变了这个地址，就会影响到另一个对象。即默认拷贝构造函数只是对对象进行浅拷贝复制(逐个成员依次拷贝)，即只复制对象空间而不复制资源。
 *
 * 浅拷贝特点
 * (1) 对于基本数据类型的成员对象，因为基础数据类型是值传递的，所以是直接将属性值赋值给新的对象。基础类型的拷贝，其中一个对象修改该值，不会影响另外一个。
 * (2) 对于引用类型，比如数组或者类对象，因为引用类型是引用传递，所以浅拷贝只是把内存地址赋值给了成员变量，它们指向了同一内存空间。改变其中一个，会对另外一个也产生影响。
 * */